import random
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.utils import get_column_letter
from datetime import datetime
import json
import os

from 自动化流程测试.招募结算一体流程.createSettleExcel import generate_random_name, generate_random_id_number, \
    generate_random_phone_number

# 加载预定义的中文姓氏和名字库
with open("../util/chinese_names.json", "r", encoding="utf-8") as file:
    names_data = json.load(file)
    surnames = names_data["surnames"]
    given_names_male = names_data["given_names_male"]
    given_names_female = names_data["given_names_female"]

def create_Free_template(dept_name):
    # 生成数据量
    num_rows = random.randint(100, 100)
    print('本次生成数据为' + str(num_rows) + '条数据')

    # 创建一个工作簿
    workbook = Workbook()
    # 选择一个sheet (默认为第一个)
    sheet = workbook.active
    # 对文件进行格式化
    # 第一行的内容
    sheet.merge_cells('A1:D1')

    # 合并H2到P2 -- 填充注意事项内容
    sheet.merge_cells('F2:L11')

    # 设置合并后单元格的对齐方式  -- 居中对齐
    cell = sheet['A1']
    cell.alignment = Alignment(horizontal='center', vertical='center')
    sheet['F2'].alignment = Alignment(horizontal='center', vertical='center', wrapText=True)

    for col_idx in range(1, 5):  # A列的索引是1，D列的索引是4
        column_letter = get_column_letter(col_idx)
        sheet.column_dimensions[column_letter].width = 20.0  # 直接设置宽度

    # 设置A2到F9的单元格居中对齐
    for row in range(2, num_rows + 3):  # 行号从2到9
        for col in range(1, 5):  # 列号从1到5，A列是第1列，D列是第4列
            sheet.cell(row=row, column=col).alignment = Alignment(horizontal='center', vertical='center')

    # 设置第1到第5行的高度
    for row_idx in range(1, num_rows + 3):  # 第一行的索引是1，第五行的索引是5
        sheet.row_dimensions[row_idx].height = 50  # 直接设置高度

    # 创建字体对象，设置加粗和颜色
    bold_font = Font(name='Calibri', bold=True)  # 加粗字体
    red_bold_font = Font(name='Calibri', bold=True, color='FF0000')  # 加粗字体，颜色为红色
    # 创建填充对象，设置背景色
    fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')  # 背景颜色为黄色
    # A1赋予字体加粗
    sheet['A1'].font = bold_font
    # A2:E2字体加粗
    coordinates = ['A2', 'B2', 'C2', 'D2']
    for coord in coordinates:
        cell = sheet[coord]
        cell.font = bold_font

    # E2字体加粗，背景黄色
    sheet['F2'].font = red_bold_font
    sheet['F2'].fill = fill

    sheet['A1'] = '自由职业者名单'
    sheet['A2'] = '姓名'
    sheet['B2'] = '身份证号'
    sheet['C2'] = '电话号码'
    sheet['D2'] = '备注'
    sheet['F2'] = '注意事项：\n1、请勿修改/删除/增加导入模板的列；请勿修改列名称及排序\n2、为保证服务效率，导入数据请勿超过5000行\n3、请勿导入重复数据\n4、姓名、身份证号、电核号码必填，备注非必填\n5、修改文件名时请勿修改/删除后缀名'
    # 获取当前时间并格式化为字符串
    now = datetime.now()
    timestamp_str = now.strftime("%Y%m%d%H%M%S%f")[:-3]
    filename = f'{dept_name}{timestamp_str}.xlsx'

    # 初始化工作表
    populate_data(sheet, num_rows)

    # 保存Excel文件
    # 获取当前工作目录
    current_directory = os.getcwd()
    settleFile = os.path.join(current_directory, '自由职业者文件夹')
    dept_folder_path = os.path.join(settleFile, dept_name)
    # 检查部门文件夹是否存在，不存在则创建
    if not os.path.exists(dept_folder_path):
        os.makedirs(dept_folder_path)
    full_output_path = os.path.join(dept_folder_path, filename)
    # 保存Excel文件
    workbook.save(full_output_path)
    return full_output_path


def populate_data(sheet, num_rows):
    # 批量填充数据
    # 批量填充数据
    # 自动生成姓名并填充
    product_names = [generate_random_name() for _ in range(num_rows)]
    for row, product_name in enumerate(product_names, start=3):  # 从第3行开始
        sheet.cell(row=row, column=1).value = product_name

    # 自动填充身份证号
    id_numbers = [generate_random_id_number() for _ in range(num_rows)]
    for row, id_number in enumerate(id_numbers, start=3):  # 从第3行开始
        sheet.cell(row=row, column=2).value = id_number

    # 自动填充手机号
    phone_numbers = [generate_random_phone_number() for _ in range(num_rows)]
    for row, phone_number in enumerate(phone_numbers, start=3):  # 从第3行开始
        sheet.cell(row=row, column=3).value = phone_number

create_Free_template('123')